#ifndef MESSAGESHOWAREA_H
#define MESSAGESHOWAREA_H

#include <QScrollArea>
#include <QWidget>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QPushButton>
#include <QIcon>
#include <QLabel>
#include <QPainter>
#include <QPainterPath>

#include "model/data.h"
#include "userinfowidget.h"

// .h 文件中不宜进行 using namespace xxxx
using model::Message;
using model::MessageType;
using model::UserInfo;

/***********************************
 * 消息展示区
 **********************************/

class MessageShowArea : public QScrollArea
{
    Q_OBJECT
public:
    MessageShowArea();

    void addMessage(bool isLeft,const Message& msg);
    void addFrontMessage(bool isLeft,const Message& msg);
    void clear();

private:
    QWidget* container;
};

/***********************************
 * 消息元素
 * 这个里面要能同时支持 文本消息, 图片消息, 文件消息, 语音消息.
 * 当前先只考虑文本消息. 另外几个后续慢慢添加.
 **********************************/

class MessageItem : public QWidget
{
    Q_OBJECT
public:
    // 此处的 isLeft 表示这个 Item 是否是一个 "左侧消息"
    MessageItem(bool isLeft);

    // 通过 工厂方法 创建 MessageItem 实例
    static MessageItem* makeMessageItem(bool isLeft,const Message& message);

    static QWidget* makeTextMessageTiem(bool isLeft,const QString& message);
    static QWidget* makeImageMessageTiem();
    static QWidget* makeFileMessageTiem();
    static QWidget* makeSpeechMessageTiem();

private:
    bool _isLeft;
};

/****************************
 * 创建类表示 "文本消息" 正文部分
 ***************************/
class MessageContentLabel : public QWidget
{
    Q_OBJECT

public:
    MessageContentLabel(bool isLeft,model::MessageType msgType,const QByteArray& content);

    void paintEvent(QPaintEvent* event) override;


private:
    QLabel* label;
    bool _isLeft;
};

#endif // MESSAGESHOWAREA_H


